//定义类型
// class Person {
//   constructor(
//       public name: string,
//       public age: number
//     ) {
//   }
//   speak() {
//     console.log(`我是  ${this.name}  今年 ${this.age}`);
//   }
// }
class Person {
    // name和age是受保护属性，不能在类外部访问，但可以在【类】与【⼦类】中访问
    constructor(name, age, 
    // IDCard属性为私有的(private)属性，只能在【类内部】使⽤
    IDCard) {
        this.name = name;
        this.age = age;
        this.IDCard = IDCard;
    }
    // getDetails是受保护⽅法，不能在类外部访问，但可以在【类】与【⼦类】中访问
    getDetails() {
        // 类中能访问受保护的name和age属性
        return `我叫：${this.name}，年龄是：${this.age} IDCard: ${this.IDCard}`;
    }
    // introduce是公开⽅法，类、⼦类、类外部都能使⽤
    introduce() {
        // 类中能访问受保护的getDetails⽅法
        console.log(this.getDetails());
    }
}
const p1 = new Person('杨超越', 18, "2222220015484");
// 可以在类外部访问introduce
p1.introduce();
// 以下代码均报错
// p1.getDetails()
// p1.name
// p1.age
class Student extends Person {
    constructor(name, age) {
        super(name, age, "");
    }
    study() {
        // this.getDetails()
        // ⼦类中可以访问introduce
        this.introduce();
        // ⼦类中可以访问name
        // this.
        console.log(`${this.name}正在努⼒学习`);
    }
}
const s1 = new Student('tom', 17);
s1.introduce();
class Car {
    constructor(vin, //⻋辆识别码，为只读属性
    year, //出⼚年份，为只读属性
    color, sound) {
        this.vin = vin;
        this.year = year;
        this.color = color;
        this.sound = sound;
    }
    // 打印⻋辆信息
    displayInfo() {
        console.log(` 识别码：${this.vin}, 出⼚年份：${this.year}, 颜⾊：${this.color}, ⾳响：${this.sound} `);
    }
}
const car = new Car('1HGCM82633A123456', 2018, '⿊⾊', 'Bose⾳响');
car.displayInfo();
export {};
// 以下代码均错误：不能修改 readonly 属性
// car.vin = '897WYE87HA8SGDD8SDGHF'; 
// car.year = 2020;
